import config from '../config'

type PositionType = {
  x: number
  y: number
}

class Position {
  // 用来存放所有元素的位置 集合
  collection: PositionType[] = []

  // 批量生成唯一坐标，不会有重叠
  public getCollection(num: number) {
    const collection = [] as PositionType[]
    for (let i = 0; i < num; i++) {
      while (true) {
        const position = this.generatePosition()
        // 从所有元素集合中 判断是否存在该位置
        const exists = this.collection.some(
          (c) => c.x === position.x && c.y === position.y
        )
        // 只有不存在，才能终止这一次循环
        if (!exists) {
          collection.push(position)
          this.collection.push(position)
          break
        }
      }
    }
    return collection
  }

  public generatePosition() {
    // 画布横向能排列的最大个数
    const countX = config.canvas.width / config.model.width
    // 画布纵向能排列的最大个数（底部需要空出3行位置，家）
    const countY = config.canvas.height / config.model.height - 5
    return {
      x: Math.floor(Math.random() * countX) * config.model.width,
      y:
        Math.floor(Math.random() * countY) * config.model.height +
        config.model.height * 2, //（顶部需要空出2行位置，留给敌方坦克）
    }
  }
}

export default new Position()
